﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AppTrans
{
    class ReportErrorObject
    {
        public const string sql = @"
select '     ОШИБКИ В ФИНАНСАХ:' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all

    select 'Не совпадает категория и тип транзакции' as TypeError, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
    from Transactions t inner join DictionaryCategories dc on t.Category = dc.Id
    where t.Type != dc.Type

union all

    select 'Для категории ''Зарплата водителя'' не заполнено поле ''Водитель'' (или наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
    from Transactions t 
    where t.Category in (select convert(int,value) from Settings where Code Like 'code_cat_racx_zp_driver%') and t.Driver is null OR
          t.Category not in (select convert(int,value) from Settings where Code Like 'code_cat_racx_zp_driver%') and t.Driver is not null

union all

    select 'Для категории ''Оплата заказчиком'' не заполнено поле ''Партнер''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
    from Transactions t
    where t.Category in (select convert(int,Value) from Settings where Code Like 'code_cat_dox_zak%') and t.Partner is null

union all

    select 'Для категории ''Закупка груза у поставщика'' не заполнено поле ''Партнер''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
    from Transactions t
    where t.Category in (select convert(int,Value) from Settings where Code Like 'code_cat_racx_suppl%') and t.Partner is null

union all

    select 'Для категории ''Топливо'' не заполнено поле ''Литры'' (или наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
    from Transactions t 
    where t.Category in (select id from DictionaryCategories where Fuel = 1) and t.Liters is null OR
	      t.Category not in (select id from DictionaryCategories where Fuel = 1) and t.Liters is not null

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Продажа + Доставка ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Место загрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is null AND OperType = 1
union all
	select 'Не заполнено поле ''Место разгрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is null AND OperType = 1
union all
	select 'Не заполнено поле ''Машина''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is null AND OperType = 1
union all
	select 'Не заполнено поле ''Водитель''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is null AND OperType = 1
union all
	select 'Поле ''Водитель'' заполнено, а поле ''ЗарплВод'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((Driver is not null and COALESCE(SalaryDriver,0) = 0) OR
	                  (Driver is null and COALESCE(SalaryDriver,0) != 0)) AND OperType = 1
union all
	select 'Не заполнено поле ''Груз''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is null AND OperType = 1
union all
	select 'Не заполнено поле ''Вес''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) = 0 AND OperType = 1
union all
	select 'Не заполнено поле ''Поставщик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is null AND OperType = 1
union all
    select 'Не заполнено поле ''Заказчик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Customer is null AND OperType = 1
union all
	select 'Поле ''Поставщик'' заполнено, а поле ''СуммаЗакуп'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and Supplier is null) OR 
	                  (COALESCE(PriceOfPurchasing,0) = 0 and Supplier is not null)) AND OperType = 1
union all
	select 'Поле ''СуммаЗакуп'' заполнено, а поле ''ВалЗакуп'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and CurrencyPurchasing is null) OR
	                  (COALESCE(PriceOfPurchasing,0) = 0 and CurrencyPurchasing is not null)) AND OperType = 1
union all
	select 'Поле ''КомиссионерПоставщика'' заполнено, а поле ''СуммаКомисПоставщика'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((SupplierCommission is not null and COALESCE(PriceCommissionPurchase,0) = 0) OR
	                  (SupplierCommission is null and COALESCE(PriceCommissionPurchase,0) != 0)) AND OperType = 1
union all
	select 'Поле ''Заказчик'' заполнено, а поле ''СуммаПродажи'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and Customer is null) OR 
	                  (COALESCE(PriceOfSales,0) = 0 and Customer is not null)) AND OperType = 1
union all
	select 'Поле ''СуммаПродажи'' заполнено, а поле ''ВалПродажи'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and CurrencySales is null) OR
	                  (COALESCE(PriceOfSales,0) = 0 and CurrencySales is not null)) AND OperType = 1
union all
	select 'Поле ''КомиссионерЗаказчика'' заполнено, а поле ''СуммаКомисЗаказч'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((CustomerCommission is not null and COALESCE(PriceCommissionSales,0) = 0) OR
	                  (CustomerCommission is null and COALESCE(PriceCommissionSales,0) != 0)) AND OperType = 1
union all
	select 'Не заполнено поле ''Км'' или = 0' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where (COALESCE(Distance,0) = 0) AND OperType = 1
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 1

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Закупка на склад ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Место загрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is null AND OperType = 5
union all
	select 'Не заполнено поле ''Место разгрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is null AND OperType = 5
union all
	select 'Не заполнено поле ''Машина''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is null AND OperType = 5
union all
	select 'Не заполнено поле ''Водитель''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is null AND OperType = 5
union all
	select 'Поле ''Водитель'' заполнено, а поле ''ЗарплВод'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((Driver is not null and COALESCE(SalaryDriver,0) = 0) OR
	                  (Driver is null and COALESCE(SalaryDriver,0) != 0)) AND OperType = 5
union all
	select 'Не заполнено поле ''Груз''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is null AND OperType = 5
union all
	select 'Не заполнено поле ''Вес''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) = 0 AND OperType = 5
union all
	select 'Не заполнено поле ''Поставщик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is null AND OperType = 5
union all
	select 'Поле ''Поставщик'' заполнено, а поле ''СуммаЗакуп'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and Supplier is null) OR 
	                  (COALESCE(PriceOfPurchasing,0) = 0 and Supplier is not null)) AND OperType = 5
union all
	select 'Поле ''СуммаЗакуп'' заполнено, а поле ''ВалЗакуп'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and CurrencyPurchasing is null) OR
	                  (COALESCE(PriceOfPurchasing,0) = 0 and CurrencyPurchasing is not null)) AND OperType = 5
union all
	select 'Поле ''КомиссионерПоставщика'' заполнено, а поле ''СуммаКомисПоставщика'' пусто/ноль (или наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((SupplierCommission is not null and COALESCE(PriceCommissionPurchase,0) = 0) OR
	                  (SupplierCommission is null and COALESCE(PriceCommissionPurchase,0) != 0)) AND OperType = 5
union all
	select 'Заполнено поле ''Заказчик'' - это не правильно для операции ''Закупка на склад''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Customer is not null AND OperType = 5
union all
	select 'Заполнено поле ''СуммаПродажи'' - это не правильно для операции ''Закупка на склад''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(PriceOfSales,0) != 0 AND OperType = 5
union all
	select 'Заполнено поле ''ВалПродажи'' - это не правильно для операции ''Закупка на склад''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where CurrencySales is not null AND OperType = 5
union all
	select 'Заполнено поле ''КомиссионерЗаказчика'' - это не правильно для операции ''Закупка на склад''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where CustomerCommission is not null AND OperType = 5
union all
	select 'Заполнено поле ''СуммаКомисЗаказч'' - это не правильно для операции ''Закупка на склад''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(PriceCommissionSales,0) != 0 AND OperType = 5
union all
	select 'Не заполнено поле ''Км'' или = 0' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where (COALESCE(Distance,0) = 0) AND OperType = 5
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 5

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Продажа со склада ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Место загрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is null AND OperType = 6
union all
	select 'Не заполнено поле ''Место разгрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is null AND OperType = 6
union all
	select 'Не заполнено поле ''Машина''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is null AND OperType = 6
union all
	select 'Не заполнено поле ''Водитель''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is null AND OperType = 6
union all
	select 'Поле ''Водитель'' заполнено, а поле ''ЗарплВод'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((Driver is not null and COALESCE(SalaryDriver,0) = 0) OR
	                  (Driver is null and COALESCE(SalaryDriver,0) != 0)) AND OperType = 6
union all
	select 'Не заполнено поле ''Груз''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is null AND OperType = 6
union all
	select 'Не заполнено поле ''Вес''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) = 0 AND OperType = 6
union all
	select 'Не заполнено поле ''Заказчик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Customer is null AND OperType = 6
union all
	select 'Поле ''Заказчик'' заполнено, а поле ''СуммаПродажи'' пусто/ноль (или наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and Customer is null) OR 
	                  (COALESCE(PriceOfSales,0) = 0 and Customer is not null)) AND OperType = 6
union all
	select 'Поле ''СуммаПродажи'' заполнено, а поле ''ВалПродажи'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and CurrencySales is null) OR
	                  (COALESCE(PriceOfSales,0) = 0 and CurrencySales is not null)) AND OperType = 6
union all
	select 'Поле ''КомиссионерЗаказчика'' заполнено, а поле ''СуммаКомисЗаказч'' пусто/ноль (или наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((CustomerCommission is not null and COALESCE(PriceCommissionSales,0) = 0) OR
	                  (CustomerCommission is null and COALESCE(PriceCommissionSales,0) != 0)) AND OperType = 6
union all
	select 'Заполнено поле ''Поставщик'' - это не правильно для операции ''Продажа со склада''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is not null AND OperType = 6
union all
	select 'Заполнено поле ''СуммаЗакуп'' - это не правильно для операции ''Продажа со склада''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(PriceOfPurchasing,0) != 0 AND OperType = 6
union all
	select 'Заполнено поле ''ВалЗакуп'' - это не правильно для операции ''Продажа со склада''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where CurrencyPurchasing is not null AND OperType = 6
union all
	select 'Заполнено поле ''КомиссионерПоставщика'' - это не правильно для операции ''Продажа со склада''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where SupplierCommission is not null AND OperType = 6
union all
	select 'Заполнено поле ''СуммаКомисПоставщика'' - это не правильно для операции ''Продажа со склада''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(PriceCommissionPurchase,0) != 0 AND OperType = 6             
union all
	select 'Не заполнено поле ''Км'' или = 0' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where (COALESCE(Distance,0) = 0) AND OperType = 6
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 6
union all

select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Только перевозка без закупки/продажи груза ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Место загрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is null AND OperType = 2
union all
	select 'Не заполнено поле ''Место разгрузки''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is null AND OperType = 2
union all
	select 'Не заполнено поле ''Машина''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is null AND OperType = 2
union all
	select 'Не заполнено поле ''Водитель''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is null AND OperType = 2
union all
	select 'Поле ''Водитель'' заполнено, а поле ''ЗарплВод'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((Driver is not null and COALESCE(SalaryDriver,0) = 0) OR
	                  (Driver is null and COALESCE(SalaryDriver,0) != 0)) AND OperType = 2
union all
	select 'Не заполнено поле ''Груз''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is null AND OperType = 2
union all
	select 'Не заполнено поле ''Вес''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) = 0 AND OperType = 2
union all
	select 'Заполнено поле ''Поставщик'' - это не правильно для работ по Перевозке' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is not null AND OperType = 2
union all
	select 'Заполнено поле ''СуммаЗакупки'' - это не правильно для работ по Перевозке' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where (COALESCE(PriceOfPurchasing,0) != 0) AND OperType = 2
union all
	select 'Заполнено поле ''ВалЗакуп'' - это не правильно для работ по Перевозке' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where CurrencyPurchasing is not null AND OperType = 2
union all
	select 'Заполнено поле ''КомиссионерПоставщика'' - это не правильно для работ по Перевозке' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where SupplierCommission is not null AND OperType = 2
union all
	select 'Заполнено поле ''СуммаКомисПоставщика'' - это не правильно для работ по Перевозке' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where (COALESCE(PriceCommissionPurchase,0) != 0) AND OperType = 2
union all
	select 'Поле ''Заказчик'' заполнено, а поле ''СуммаПродажи'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and Customer is null) OR 
	                  (COALESCE(PriceOfSales,0) = 0 and Customer is not null)) AND OperType = 2
union all
	select 'Поле ''СуммаПродажи'' заполнено, а поле ''ВалПродажи'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and CurrencySales is null) OR
	                  (COALESCE(PriceOfSales,0) = 0 and CurrencySales is not null)) AND OperType = 2
union all
	select 'Поле ''КомиссионерЗаказчика'' заполнено, а поле ''СуммаКомисЗаказч'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((CustomerCommission is not null and COALESCE(PriceCommissionSales,0) = 0) OR
	                  (CustomerCommission is null and COALESCE(PriceCommissionSales,0) != 0)) AND OperType = 2
union all
	select 'Не заполнено поле ''Км'' или = 0' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where (COALESCE(Distance,0) = 0) AND OperType = 2
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 2

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Продажа без доставки ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Заполнено поле ''Место загрузки'' - это не правильно для Продаж без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is not null AND OperType = 3
union all
	select 'Заполнено поле ''Место разгрузки'' - это не правильно для Продаж без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is not null AND OperType = 3
union all
	select 'Заполнено поле ''Машина'' - это не правильно для Продаж без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is not null AND OperType = 3
union all
	select 'Заполнено поле ''Водитель'' - это не правильно для Продаж без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is not null AND OperType = 3
union all
	select 'Заполнено поле ''ЗарплВод'' - это не правильно для Продаж без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where (COALESCE(SalaryDriver,0) != 0) AND OperType = 3
union all
	select 'Не заполнено поле ''Груз''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is null AND OperType = 3
union all
	select 'Не заполнено поле ''Вес''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) = 0 AND OperType = 3
union all
	select 'Не заполнено поле ''Поставщик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is null AND OperType = 3
union all
	select 'Не заполнено поле ''Поставщик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is null AND OperType = 3
union all
	select 'Поле ''Поставщик'' заполнено, а поле ''СуммаЗакуп'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and Supplier is null) OR 
	                  (COALESCE(PriceOfPurchasing,0) = 0 and Supplier is not null)) AND OperType = 3
union all
	select 'Поле ''СуммаЗакуп'' заполнено, а поле ''ВалЗакуп'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfPurchasing,0) != 0 and CurrencyPurchasing is null) OR
	                  (COALESCE(PriceOfPurchasing,0) = 0 and CurrencyPurchasing is not null)) AND OperType = 3
union all
	select 'Поле ''КомиссионерПоставщика'' заполнено, а поле ''СуммаКомисПоставщика'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((SupplierCommission is not null and COALESCE(PriceCommissionPurchase,0) = 0) OR
	                  (SupplierCommission is null and COALESCE(PriceCommissionPurchase,0) != 0)) AND OperType = 3
union all
    select 'Не заполнено поле ''Заказчик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Customer is null AND OperType = 3
union all
	select 'Поле ''Заказчик'' заполнено, а поле ''СуммаПродажи'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and Customer is null) OR 
	                  (COALESCE(PriceOfSales,0) = 0 and Customer is not null)) AND OperType = 3
union all
	select 'Поле ''СуммаПродажи'' заполнено, а поле ''ВалПродажи'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and CurrencySales is null) OR
	                  (COALESCE(PriceOfSales,0) = 0 and CurrencySales is not null)) AND OperType = 3
union all
	select 'Поле ''КомиссионерЗаказчика'' заполнено, а поле ''СуммаКомисЗаказч'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((CustomerCommission is not null and COALESCE(PriceCommissionSales,0) = 0) OR
	                  (CustomerCommission is null and COALESCE(PriceCommissionSales,0) != 0)) AND OperType = 3
union all
	select 'Заполнено поле ''Км'' или не равно 0 - Это не правильно для Продажы без доставки' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where COALESCE(Distance,0) != 0 AND OperType = 3
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 3

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В РАБОТАХ ( Услуги ):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Заполнено поле ''Место загрузки'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where LoadingPlace is not null AND OperType = 4
union all
	select 'Заполнено поле ''Место разгрузки'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work where UnloadingPlace is not null AND OperType = 4
union all
	select 'Заполнено поле ''Машина'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Machine is not null AND OperType = 4
union all
	select 'Заполнено поле ''Водитель'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Driver is not null AND OperType = 4
union all
	select 'Заполнено поле ''ЗарплВод'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where (COALESCE(SalaryDriver,0) != 0) AND OperType = 4
union all
	select 'Заполнено поле ''Груз'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Goods is not null AND OperType = 4
union all
	select 'Заполнено поле ''Вес'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where COALESCE(Weight,0) != 0 AND OperType = 4
union all
	select 'Заполнено поле ''Поставщик'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Supplier is not null AND OperType = 4
union all
	select 'Заполнено поле ''СуммаЗакупки'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where (COALESCE(PriceOfPurchasing,0) != 0) AND OperType = 4
union all
	select 'Заполнено поле ''ВалЗакуп'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where CurrencyPurchasing is not null AND OperType = 4
union all
	select 'Заполнено поле ''КомиссионерПоставщика'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where SupplierCommission is not null AND OperType = 4
union all
	select 'Заполнено поле ''СуммаКомисПоставщика'' - это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where (COALESCE(PriceCommissionPurchase,0) != 0) AND OperType = 4
union all
    select 'Не заполнено поле ''Заказчик''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where Customer is null AND OperType = 4
union all
	select 'Поле ''Заказчик'' заполнено, а поле ''СуммаПродажи'' пусто или ноль (и наоборот)' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and Customer is null) OR 
	                  (COALESCE(PriceOfSales,0) = 0 and Customer is not null)) AND OperType = 4
union all
	select 'Поле ''СуммаПродажи'' заполнено, а поле ''ВалПродажи'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Work w where ((COALESCE(PriceOfSales,0) != 0 and CurrencySales is null) OR
	                  (COALESCE(PriceOfSales,0) = 0 and CurrencySales is not null)) AND OperType = 4
union all
	select 'Поле ''КомиссионерЗаказчика'' заполнено, а поле ''СуммаКомисЗаказч'' пусто или ноль (и наоборот) ' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки
	from Work w where ((CustomerCommission is not null and COALESCE(PriceCommissionSales,0) = 0) OR
	                  (CustomerCommission is null and COALESCE(PriceCommissionSales,0) != 0)) AND OperType = 4
union all
	select 'Заполнено поле ''Км'' или не равно 0 - Это не правильно для Услуг' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work w where COALESCE(Distance,0) != 0 AND OperType = 4
union all
	select 'Кол-во работ не равно 1' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Предупреждение' as Уровень_ошибки
	from Work where CountWork != 1 AND OperType = 4

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ УЧЕТ ТОПЛИВА (Закупка у поставщика):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Топливо''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling where FuelType is null AND FuelOperType = 2
union all
	select 'Не заполнено поле ''Поставщик топлива''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling where FuelSupplier is null AND FuelOperType = 2
union all
	select 'Не заполнено поле ''Стоимость топлива (грн)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Price,0) = 0 AND FuelOperType = 2
union all
	select 'Не заполнено поле ''Остаток в баке (л)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(FuelRemaining,0) = 0 AND FuelOperType = 2
union all
	select 'Не заполнено поле ''Пробег по GPS (км)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Distance,0) = 0 AND FuelOperType = 2
union all
	select 'Не заполнено поле ''Показатель одометра (км)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Odometer,0) = 0 AND FuelOperType = 2

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all
	select '     ОШИБКИ УЧЕТ ТОПЛИВА (Закупка на свою АЗС):' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
	select 'Не заполнено поле ''Топливо''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling where Fuel is null AND FuelOperType = 1
union all
	select 'Не заполнено поле ''АЗС''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling where GasStation is null AND FuelOperType = 1
union all
	select 'Заполнено поле ''Поставщик топлива'' - это не правильно при заправке со своей АЗС' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling where FuelSupplier is not null AND FuelOperType = 1
union all
	select 'Заполнено поле ''Стоимость топлива (грн)'' - это не правильно при заправке со своей АЗС' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Price,0) != 0 AND FuelOperType = 1
union all
	select 'Не заполнено поле ''Остаток в баке (л)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(FuelRemaining,0) = 0 AND FuelOperType = 1
union all
	select 'Не заполнено поле ''Пробег по GPS (км)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Distance,0) = 0 AND FuelOperType = 1
union all
	select 'Не заполнено поле ''Показатель одометра (км)''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки 
	from Refueling  where COALESCE(Odometer,0) = 0 AND FuelOperType = 1

union all
select '' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки
union all

select '     ОШИБКИ В НАСТРОЙКАХ:' as Тип_ошибки, '' as Кол_во_ошибок, '' as Уровень_ошибки

union all
select 'Неправильное значение настройки ''code_nalog''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Информационный' as Уровень_ошибки from Settings s where s.Code Like 'code_nalog%' and s.Value not in (select id from DictionaryCategories where Type = 2)
union all
select 'Неправильное значение настройки ''code_currency''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Информационный' as Уровень_ошибки from Settings s where s.Code Like 'code_currency%' and s.Value not in (select id from DictionaryCurrency)
union all
select 'Неправильное значение настройки ''code_cat_dox_zak''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_dox_zak%' and s.Value not in (select id from DictionaryCategories where Type = 1)
union all
select 'Неправильное значение настройки ''code_cat_dox_dolg''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Информационный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_dox_dolg%' and s.Value not in (select id from DictionaryCategories where Type = 1)
union all
select 'Неправильное значение настройки ''code_cat_racx_dolg''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Информационный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_racx_dolg%' and s.Value not in (select id from DictionaryCategories where Type = 2)
union all
select 'Неправильное значение настройки ''code_cat_racx_zp_driver''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_racx_zp_driver%' and s.Value not in (select id from DictionaryCategories where Type = 2)
union all
select 'Неправильное значение настройки ''code_cat_racx_suppl''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_racx_suppl%' and s.Value not in (select id from DictionaryCategories where Type = 2)
union all
select 'Неправильное значение настройки ''code_cat_racx_komisiya''' as Тип_ошибки, convert(nchar(20),count(*)) as Кол_во_ошибок, 'Критичный' as Уровень_ошибки from Settings s where s.Code Like 'code_cat_racx_komisiya%' and s.Value not in (select id from DictionaryCategories where Type = 2)
";
        public string Тип_ошибки { get; set; }
        public string Кол_во_ошибок { get; set; }
        public string Уровень_ошибки { get; set; }
    }
}
